import re


tel=re.match(r'^\d{3}\-\d{3,8}$', '010-12345')

if tel:
    print('match')
else:
    print('not match')

#切分字符串
print('a b   c'.split(' '))

print(re.split(r'\s+', 'a b   c'))

print(re.split(r'[\s\,]+', 'a,b, c  d'))

re.split(r'[\s\,\;]+', 'a,b;; c  d')


#分组
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print(m.group(0))
print(m.group(1))
print(m.group(2))

#贪婪匹配
print(re.match(r'^(\d+)(0*)$', '102300').groups())

# 由于\d+采用贪婪匹配，直接把后面的0全部匹配了，结果0*只能匹配空字符串了。
# 必须让\d+采用非贪婪匹配（也就是尽可能少匹配），才能把后面的0匹配出来，加个?就可以让\d+采用非贪婪匹配
print(re.match(r'^(\d+?)(0*)$', '102300').groups())

#预编译
# 当我们在Python中使用正则表达式时，re模块内部会干两件事情：
#     编译正则表达式，如果正则表达式的字符串本身不合法，会报错；
#     用编译后的正则表达式去匹配字符串。
# 如果一个正则表达式要重复使用几千次，出于效率的考虑，我们可以预编译该正则表达式，接下来重复使用时就不需要编译这个步骤了
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')

print(re_telephone.match('010-12345').groups())
print(re_telephone.match('010-12345').groups())